Printers have become very popular in recent times due to their greatly improved ability to print clear images. Generally, printers are available as monochrome only printers, such as printers that print only in gray and black, or color printers that print in color as well as monochrome. These printers operate by converting an image on a client device such as a personal computer into data that is received by a formatter that stores the data in the printer. The formatter generates coded data representing the image, which is then transmitted by the formatter to a print engine that drives the mechanisms of the printer to convert the data back into an image that is printed on a print medium, such as paper.
Printing devices that are used by computers and by computer-related devices, such as digital cameras, generally utilize a two-dimensional matrix of image elements or pixels. Each pixel in a color image matrix, for example, comprises a Red (“R”), Green (“G”), and Blue (“B”) cell. Each such cell is represented by a corresponding memory cell that may store a numeric value. Memory cell values may typically be 8, 10, or 12 bits in size, or may be stored in any other convenient size. The memory cell values for the colors of each pixel may be stored separately in the computer memory, or may be merged into a single memory address location. A computer program can then cause a particular pixel to be printed in any visible color, or to appear black or white, by setting the numeric values of its red, green, and blue cells to appropriate values for the printer.
In many products and applications, some of the pixel information is generated or “interpolated” by a computer microprocessor (“CPU”), based on other information. This processing of the pixel information improves the overall quality of the printed image produced by the printer.
Depending upon the type of printer being utilized, the processing may be used, for example, to remove artifacts from the image that could cause problems, such as “toner explosion”. (“Toner explosion” refers to toner that is scattered when moisture in the media suddenly vaporizes.) The processing may also be used to calibrate the image information for the printer to adjust for particular printer characteristics, so that the final printed image faithfully reproduces the original image. The processing can also be used to enhance the printed image to improve it over the original image, for example, by the removal of “red eye” in a photograph.
Such artifact removal, image enhancement, resolution enhancement, and so forth, is performed serially on the image data on a pixel-by-pixel basis. In one process, the pixels are individually “windowed” by selecting a small window or matrix of the pixels that surround the pixel that is being processed. The particular processing that is then performed on the selected (or “current” or “target”) pixel is then based on the values of the surrounding pixels.
Unfortunately, the image enhancement information is not stored in memory in a manner that efficiently supports such pixel windowing processing. Instead, for each type of image enhancement, a complete table of all possible windows is stored in memory. The table serves as a look up table (“LUT”). The CPU then matches the window of the target pixel to a corresponding entry in the LUT to obtain instructions, from that matching LUT pattern, for optimizing the value of the target pixel. Each such LUT can therefore be very large and can require a very large amount of memory. For example, a full 5-row by 3-column LUT for one-bit data would have 32,768 entries. Because the processing must be performed very, very quickly, the LUT must be stored in very fast memory, such as CPU cache memory, not in the ordinary main memory. A standard CPU does not ordinarily have sufficient cache memory for such a large data table.
Thus, to support ever increasing printer operating speeds, prior solutions have resorted to increasingly expensive specialized hardware solutions, such as large, dedicated, high-speed memories (e.g., high-speed SRAMs). Such solutions, however, cause ever-increasing hardware and manufacturing costs, whereas the historical trend in the industry has been the opposite-declining costs accompanied by increasing performance.
Thus, a need still remains for faster, more efficient, more effective, and less expensive methods and mechanisms for optimizing memory utilization, especially processor cache memory utilization, for image processing. In view of the continuing increases in performance, capabilities, and customer expectations, accompanied by ever-increasing competition and declining prices, it is ever more and more critical that answers be found to these problems.
Solutions to these problems have been long sought but prior developments have not taught or suggested any solutions and, thus, solutions to these problems have long eluded those skilled in the art.